package com.ahs.region.adapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class ApiInterceptorAdapter implements HandlerInterceptor {
	private static final Log logger = LogFactory.getLog(ApiInterceptorAdapter.class);
	
	private ThreadLocal<Long> startTime = new ThreadLocal<Long>();
	/**
	 * 在请求处理之前进行调用（Controller方法调用之前）
	 */
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		startTime.set(System.currentTimeMillis());
		response.setHeader("Access-Control-Allow-Origin", "*");
		response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
		response.setCharacterEncoding("UTF-8");
//		boolean signFromResponse = Signature.getSignFromResponse(request.getParameterMap());
//		if(!signFromResponse){
//			response.getWriter().print("爱上一匹野马,可是家里没有草原!");
//		}
//		return signFromResponse;
		return true;
	}
	/**
	 * 请求处理之后进行调用，但是在视图被渲染之前（Controller方法调用之后）
	 */
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		logger.info(request.getServletPath() + " " + request.getParameterMap() + " " + response.getStatus());
	}

	/**
	 * 在整个请求结束之后被调用，也就是在DispatcherServlet 渲染了对应的视图之后执行（主要是用于进行资源清理工作）
	 */
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		logger.info(request.getServletPath() + " " + request.getParameterMap() + " " + response.getStatus());
		long times = System.currentTimeMillis() - startTime.get();
		logger.info("请求  "+request.getServletPath()+"  耗时："+ times/1000 +"秒");
	}
}
